package com.njts.method;

import java.util.Arrays;

/**
 * @author David GE
 * Date  2025/11/14
 */
public class Value {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //void代表返回值为空类型 void
        // 基本数据类型
        int sum = getSum(true, 1, 2);
        System.out.println(sum);
        // 引用数据类型:数组为例
        int[] data = new int[]{13, 0, 35, 23, 90,6};
        //int[] newArr = selectSort(data);
        selectSort2(data);

        System.out.println(Arrays.toString(data));
    }
    public static int getSum(boolean b,int... nums){
        int res =0;
        // 修改了num的值
        for (int i = 0; i < nums.length; i++) {
            res+=nums[i];//res=res+num[i]
        }
        return res;
    }
    // 纯函数(只关注功能)

    public static int[] selectSort (int[] data){
        for (int i = 0; i < data.length-1; i++) {
            int minIndex =i;
            for (int j = i+1; j <data.length ; j++) {
                // 内循环替换是下标
                if (data[j]<data[minIndex]){
                    minIndex=j;
                }
            }
            // 现在minIndex指向的就是当前新的目标元素,交换
            int t = data[i];
            data[i] = data[minIndex];
            data[minIndex]=t;
        }
        return data;
    }
    // 当参数列表中有引用类型声明参数时,不返回引用对象,直接对其本身的内容进行修改
    //为什么对于引用数据类型,在方法内部的操作会改变原来的内容的内容? 对于基本数据类型,传递是值,并不是变量本身;对于引用类型,传递是地址的引用,引用传递(XXXX)
    //公理:Java只有值传递,没有引用传递!
    public static void selectSort2 (int[] data){
        for (int i = 0; i < data.length-1; i++) {
            int minIndex =i;
            for (int j = i+1; j <data.length ; j++) {
                // 内循环替换是下标
                if (data[j]<data[minIndex]){
                    minIndex=j;
                }
            }
            // 现在minIndex指向的就是当前新的目标元素,交换
            int t = data[i];
            data[i] = data[minIndex];
            data[minIndex]=t;
        }
        data=new int[]{0,2,3};//改变引用无效(☆)

    }
}
